package proyectoX.src.armas;

import java.awt.Point;
import java.util.Random;

import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.municiones.MunicionBasica;
import proyectoX.src.municiones.MunicionJefe;
import proyectoX.src.municiones.MunicionTransporte;
import proyectoX.src.municiones.MunicionX;

/**
 * Crea un arma que tiene dos tipos de disparos. Utilizada por la nave enemiga Jefe.
 *
 */
public class LaserJefe extends arma {

	private long tiempoUltimoDisparoTriple;
	private final static long RETARDO_LASER = 1500;
	private final static long DELAY_TRIPLE = 6000; 
	private Random generador;


	/**
	 * Crea el arma con el nivel pasado por parámetro.
	 * @param n Nivel actual.
	 */
	public LaserJefe(Nivel n){
		super(-1,4,n, RETARDO_LASER);  //-1 en municiones indica que son INFINITAS
		tiempoUltimoDisparo = 0;
		tiempoUltimoDisparoTriple = 0;
		generador = new Random(); 
	}


	/**
	 * Decide si disparar 3 bolas de energía centradas y que caen verticalmente o si crear 2 bolas de energía
	 * más grandes disparadas en diagonal hacia abajo en una posición relativa a la pasada por parámetro.
	 * 
	 * @param location Posición a partir de la cuál se decidirá dónde crear las municiones.
	 */
	public void disparar(Point location){
		long tiempoActual = System.currentTimeMillis();

		if (pasoDelay()) {

			int tipoDisparo = generador.nextInt(2);

			//DISPARO TRIPLE
			if ((tipoDisparo == 0) &&(tiempoActual - tiempoUltimoDisparoTriple >= DELAY_TRIPLE)) {

				int offsetX = -30;

				for (int i = 0; i < 3; i++) {
					MunicionX m= new MunicionTransporte(location.x+offsetX,location.y,this,nivel);
					nivel.agregarMunicion(m);
					offsetX += 30;
				}
				tiempoUltimoDisparoTriple = tiempoActual;
			} 

			//DISPARO NORMAL
			else {
				
				//mínimo esperar 1 segundo después del disparo triple para el disparo normal 
				if ((tiempoActual - tiempoUltimoDisparoTriple >= 2000)&&(tiempoActual - tiempoUltimoDisparo >= 1500)) {
					MunicionX m1 = new MunicionJefe(location.x+30,location.y,this,nivel, 10);
					MunicionX m2 = new MunicionJefe(location.x-30,location.y,this,nivel, -10);
					nivel.agregarMunicion(m1);
					nivel.agregarMunicion(m2);
				}
			}

			tiempoUltimoDisparo = tiempoActual;

		}
	}


}
